package com.express.util;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.DigestUtils;

import java.nio.charset.Charset;
import java.security.MessageDigest;

/**
 * MD5加密工具类
 * 
 * @author zhouling
 * @date 2018年6月12日
 *
 */
public class MD5Util {
	private static Logger logger = LoggerFactory.getLogger(MD5Util.class);
	private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
			"e", "f"};

	private static final String ENCODING = "UTF-8";

	private static String byteArrayToHexString(byte b[]) {
		StringBuffer buffer = new StringBuffer();
		for (int i = 0; i < b.length; i++)
			buffer.append(byteToHexString(b[i]));
		return buffer.toString();
	}

	private static String byteToHexString(byte b) {
		int n = b;
		if (n < 0) {
			n += 256;
		}
		int d1 = n / 16;
		int d2 = n % 16;
		return hexDigits[d1] + hexDigits[d2];
	}

	public static String MD5Encode(String origin, String charsetname) {
		String resultString = null;
		try {
			resultString = new String(origin);
			MessageDigest md = MessageDigest.getInstance("MD5");
			if (StringUtils.isEmpty(charsetname)) {
				resultString = byteArrayToHexString(md.digest(resultString.getBytes(ENCODING)));
			} else {
				resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
			}
		} catch (Exception exception) {

		}
		return resultString;
	}

	public static String md5(String text)
			throws Exception {
		String encodeStr = DigestUtils.md5DigestAsHex(text.getBytes(Charset.forName("UTF-8")));
		logger.info("MD5加密后的字符串:encodeStr=" + encodeStr);
		return encodeStr;
	}

	public static boolean verify(String text, String md5)
			throws Exception {
		String md5Text = md5(text);
		if (md5Text.equalsIgnoreCase(md5)) {
			logger.info("MD5验证通过");
			return true;
		}
		return false;
	}

	public static void main(String args[]) throws Exception{
		System.out.println(MD5Encode("ceshi", "gbk"));
//		System.out.println(MD5Encode("ceshi", "utf-8"));
//		System.out.println(md5("123456"));
//		String temp = "{\"partnerId\":\"test\",\"partnerKey\":\"test\",\"net\":\"\",\"kuaidicom\":\"zhaijisong\",\"recMan\":{\"name\":\"张三\",\"mobile\":\"13888888888\",\"printAddr\":\"西藏日喀则市定日县珠穆朗玛峰\",\"company\":\"\"},\"sendMan\":{\"name\":\"李四\",\"mobile\":\"12345678910\",\"printAddr\":\"西藏日喀则市定日县珠穆朗玛峰\",\"company\":\"\"},\"cargo\":\"test\",\"tempId\":\"82d720f64e89418bb0c136d48d70dc2e\",\"childNumType\":\"\",\"payType\":\"SHIPPER\",\"expType\":\"标准快递\",\"remark\":\"测试下单,请勿发货\",\"collection\":\"0\",\"needChild\":\"0\",\"needBack\":\"0\",\"count\":\"2\",\"printType\":\"CLOUD\",\"siid\":\"1133\",\"needDesensitization\":true,\"needLogo\":true}";
//		System.out.println(verify(temp,"8CBC771AC66FC0F6F9C86FB1613892F5"));
//
//		String temp1 = "{\"code\":200,\"data\":{\"kuaidinum\":\"ZJS007004272752\",\"bulkpen\":\"021-HD23-DD20\",\"kdComOrderNum\":\"0976611725\",\"taskId\":\"316702C25CA34AAE8EF3EA330FD39E7E\"},\"message\":\"success\",\"time\":0,\"success\":true}";
		String temp = "\"已签收\\n\\n2024-04-18 18:07 您的快件已由本人签收，如有疑问请电联快递员【赵益，电话：18721939341】，感谢您使用顺丰，期待再次为您服务。（主单总件数：1件）\\n\\n\\n派送中\\n\\n2024-04-18 15:15 快件交给赵益，正在派送途中（联系电话：18721939341，顺丰已开启“安全呼叫”保护您的电话隐私,请放心接听！）（主单总件数：1件）\\n\\n\\n运送中\\n\\n2024-04-18 15:08 我们正在为您的快件分配最合适的快递员，请您稍等。\\n\\n\\n运送中\\n\\n2024-04-18 14:48 快件到达 【上海浦东金湘店】\\n\\n\\n运送中\\n\\n2024-04-18 13:53 快件离开 【上海浦江中转场】，已在发往 【上海浦东金湘店】 的路上\\n\\n\\n运送中\\n\\n2024-04-18 13:50 快件在【上海浦江中转场】完成分拣，准备发往 【上海浦东金湘店】\\n\\n\\n运送中\\n\\n2024-04-18 12:35 快件到达 【上海浦江中转场】\\n\\n\\n运送中\\n\\n2024-04-18 11:43 快件离开 【上海总集散中心】，已在发往 【上海浦江中转场】 的路上\\n\\n\\n运送中\\n\\n2024-04-18 10:47 快件在【上海总集散中心】完成分拣，准备发往 【上海浦江中转场】\\n\\n\\n运送中\\n\\n2024-04-18 10:45 快件到达 【上海总集散中心】\\n\\n\\n已落地\\n\\n2024-04-18 08:41 快件到达【上海】，准备发往【上海总集散中心】\\n\\n\\n已起飞\\n\\n2024-04-18 06:49 快件在【广州飞往上海航班上】已起飞\\n\\n\\n运送中\\n\\n2024-04-18 02:34 快件在【广州白云航空站点】完成分拣，准备发往下一站\\n\\n\\n运送中\\n\\n2024-04-18 02:34 快件到达 【广州白云航空站点】\\n\\n\\n运送中\\n\\n2024-04-18 00:12 快件离开 【广州化龙中转场】，已在发往 【广州白云航空站点】 的路上\\n\\n\\n运送中\\n\\n2024-04-18 00:01 快件在【广州化龙中转场】完成分拣，准备发往 【广州白云航空站点】\\n\\n\\n运送中\\n\\n2024-04-17 23:37 快件到达 【广州化龙中转场】\\n\\n\\n运送中\\n\\n2024-04-17 21:48 快件离开 【广州南沙留东村店】，已在发往 【广州化龙中转场】 的路上\\n\\n\\n运送中\\n\\n2024-04-17 21:16 快件在【广州南沙留东村店】完成分拣，准备发往 【广州化龙中转场】\\n\\n\\n已揽收\\n\\n2024-04-17 20:47 顺丰速运 已收取快件\"\n";

		String[] lines = temp.split("\n\n");
		for (String line : lines) {
			System.out.println(line);
		}
		System.out.println("2024-04-18 18:07".length());
	}
}
